package info.demo.entity;

import java.util.Date;

import org.hibernate.Query;

public class ContaPesquisa {

	public Date dataInicio;
	public Date dataFim;
	public String colunaData;
	public String titulo;
	public String numero;
	public String grupos;
	public String opcoes;
	
	public String getHQL() {
		StringBuffer sbQuery = new StringBuffer();
		sbQuery.append(" WHERE id > 0 ");
		if ( dataInicio != null && dataFim != null && colunaData != null ) {
			sbQuery.append(" AND " + colunaData + " between :dataInicio and :dataFim ");
		}
		if (titulo != null) {
			sbQuery.append(" AND lower(conta) like :conta ");
		}
		if ( numero != null ) {
			sbQuery.append(" AND lower(documento) like :documento ");
		}
		if ( grupos != null ) { 
			sbQuery.append(" AND ( ");
			StringBuffer sbgrupos = new StringBuffer();
			for(String g : grupos.split(",")) {
				sbgrupos.append(" lower(grupoConta) like '%" + g.toLowerCase() + "%' OR ");
			}
			String g = sbgrupos.toString();
			sbQuery.append(g.substring(0, g.lastIndexOf(" OR ")));
			sbQuery.append(" ) ");
		}
		if ( opcoes != null ) { 
			sbQuery.append(" AND ( ");
			StringBuffer sbopcoes = new StringBuffer();
			for(String g : opcoes.split(",")) {
				if ("true".equalsIgnoreCase(g)) {
					sbopcoes.append(" paga = true OR ");
				} else {
					sbopcoes.append(" paga = false OR ");
				}
			}
			String g = sbopcoes.toString();
			sbQuery.append(g.substring(0, g.lastIndexOf(" OR ")));
			sbQuery.append(" ) ");
		}
		return sbQuery.toString();
	}
	
	public void configuraQuery(Query q) {
		if ( dataInicio != null && dataFim != null && colunaData != null ) {
			q.setParameter("dataInicio", dataInicio);
			q.setParameter("dataFim", dataFim);
		}
		if (titulo != null) {
			q.setParameter("conta", "%" + titulo.toLowerCase() + "%");
		}
		if ( numero != null ) {
			q.setParameter("documento", "%" + numero.toLowerCase() + "%");
		}
	}
	
}
